package com.woniuxy.goods.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniuxy.goods.dto.GoodsCatDto;
import com.woniuxy.goods.dto.GoodsCatTreeDto;
import com.woniuxy.goods.entity.GoodsCat;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniuxy.goods.param.AddGoodsCatParam;
import com.woniuxy.goods.param.UpdateCatStateParam;
import com.woniuxy.goods.param.UpdateGoodsCatParam;

import java.util.List;
import java.util.Set;

/**
 * <p>
 *  服务类
 * </p>
 * 类别管理服务层接口
 * @author ...
 * @since 2024年05月22日
 */
public interface GoodsCatService extends IService<GoodsCat> {

    /**
     * 新增典当物品类别
     * @param param 新增类别对象
     * @return 类别信息
     * @throws Exception
     */
    GoodsCat addGoodsCat(AddGoodsCatParam param) throws Exception;

    /**
     * 修改典当物品类别
     * @param param 修改类别对象
     * @return 类别信息
     * @throws Exception
     */
    GoodsCat updateGoodsCat(UpdateGoodsCatParam param) throws Exception;

    /**
     * 修改典当物品类别状态
     * @param param 修改类别状态对象
     * @return 类别信息
     * @throws Exception
     */
    GoodsCat updateCatState(UpdateCatStateParam param) throws Exception;

    /**
     * 根据id查找典当物品类别
     * @param catId 类别id
     * @return 类别信息
     * @throws Exception
     */
    GoodsCat findCatById(Integer catId);

    /**
     * 查找典当物品类别树
     * @return 类别信息树
     * @param brandId 品牌id
     * @throws Exception
     */
    List<GoodsCatTreeDto> findCatTree(Integer brandId) throws Exception;

    /**
     * 通过ids查询典当物品类别
     * @param catIds 类别id集合
     * @return 类别信息集合
     * @throws Exception
     */
    List<GoodsCatDto> findCatByIds(Set<Integer> catIds);

    /**
     * 通过ids查询典当物品一级类别
     * @param catIds 类别id集合
     * @return 类别信息集合
     * @throws Exception
     */
    List<GoodsCat> findOneCatByIds(Set<Integer> catIds);

    /**
     * 查找所有典当物品类别
     * @return 类别信息
     * @throws Exception
     */
    List<GoodsCatDto> findAllCat();

    /**
     * 查找所有二级类别
     * @return 类别信息
     * @throws Exception
     */
    List<GoodsCat> findAllSubCat();

    /**
     * 分页查询所有一级类别
     * @param pageNum
     * @param pageSize
     * @param catName
     * @return
     */
    Page<GoodsCatDto> pageAllCat(Integer pageNum, Integer pageSize, String catName) throws Exception;
}
